namespace designpatternsplus.contracts
{
    using System;
    using System.Collections.Generic;

    /// <summary>
    /// 
    /// </summary>
    public interface IProductRepository : ICollection<ISkuDetails>
    {
        /// <summary>
        /// Determines whether [contains] [the specified key].
        /// </summary>
        /// <param name="key">The key.</param>
        /// <returns>
        /// 	<c>true</c> if [contains] [the specified key]; otherwise, <c>false</c>.
        /// </returns>
        bool Contains(Guid key);
        /// <summary>
        /// Removes the specified key.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <returns></returns>
        bool Remove(Guid key);
        /// <summary>
        /// Gets the comparer.
        /// </summary>
        /// <value>The comparer.</value>
        IEqualityComparer<Guid> Comparer { get; }
        /// <summary>
        /// Gets the <see cref="designpatternsplus.contracts.ISkuDetails"/> with the specified key.
        /// </summary>
        /// <value></value>
        ISkuDetails this[Guid key] { get; }
        /// <summary>
        /// Indexes the of.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <returns></returns>
        int IndexOf(ISkuDetails item);
        /// <summary>
        /// Inserts the specified index.
        /// </summary>
        /// <param name="index">The index.</param>
        /// <param name="item">The item.</param>
        void Insert(int index, ISkuDetails item);
        /// <summary>
        /// Removes at.
        /// </summary>
        /// <param name="index">The index.</param>
        void RemoveAt(int index);
        /// <summary>
        /// Gets or sets the <see cref="designpatternsplus.contracts.ISkuDetails"/> at the specified index.
        /// </summary>
        /// <value></value>
        ISkuDetails this[int index] { get; set; }
    }
}